establish message subroutines and register grid-type
  DIM sub[upperMessage]
' sub[#Callback]         = SUBADDRESS (Callback)
  sub[#Create]           = SUBADDRESS (Create)
  sub[#CreateWindow]     = SUBADDRESS (CreateWindow)
  sub[#GetSmallestSize]  = SUBADDRESS (GetSmallestSize)
  sub[#Resize]           = SUBADDRESS (Resize)
  sub[#Selection]        = SUBADDRESS (Selection)
'
  IF sub[0] THEN PRINT "XuiDialog2B(): Initialize: Error::: (Undefined Message)"
  IF func[0] THEN PRINT "XuiDialog2B(): Initialize: Error::: (Undefined Message)"
  XuiRegisterGridType (@XuiDialog2B, @"XuiDialog2B", &XuiDialog2B(), @func[], @sub[])

The sub[] array, which must contain the message processing subroutine addresses for this grid function, is dimensioned large enough to hold subroutine addresses for the highest message number.  Then subroutine addresses are then assigned to sub[] for those messages to be processed by internal message processing subroutines.

Every grid function must have message processing subroutines for #Create and #CreateWindow messages, so whenever GuiDesigner creates a grid function, it generates message subroutines and corresponding message subroutine address assignments for #Create and #CreateWindow.

  sub[#Create]           = SUBADDRESS (Create)
  sub[#CreateWindow]     = SUBADDRESS (CreateWindow)

GuiDesigner also creates subroutines and address assignments for #Callback and #Selection messages.  But the Callback address assignment is disabled, since func[#Callback]=&XuiCallback() handles callback messages for visual grid types.

To add functionality to a visual only grid type, disable the func[#Callback]=&XuiCallback() line, then enable the sub[#Callback]=SUBADDRESS(Callback) line and add functionality code to the Selection subroutine and/or any other callback relevant callback message processing subroutines.

To make XuiDialog2B grids resizable, a programmer provided message subroutines for #GetSmallestSize and #Resize messages.  To make these subroutines execute when this grid function receives these messages, the following lines were added to Initialize :

  func[#GetSmallestSize] = 0 ' cancel standard function
  func[#Resize]          = 0 ' cancel standard function

  sub[#GetSmallestSize]  = SUBADDRESS (GetSmallestSize) ' enable internal subroutine
  sub[#Resize]           = SUBADDRESS (Resize) ' enable internal subroutine

The first two lines cancel any default standard message functions that might exist, and the second two lines install the programmer written message subroutines.

Finally, the XuiDialog2B grid type is registered with GraphicsDesigner and GuiDesigner by XuiRegisterGridType().